#include "WordList.hpp"

std::vector <std::string> WordList::generateWordList()
{
	std::vector <std::string> wordList;

	wordList.push_back("zero");
	wordList.push_back("one");
	wordList.push_back("two");
	wordList.push_back("three");
	wordList.push_back("four");
	wordList.push_back("five");
	wordList.push_back("six");
	wordList.push_back("seven");
	wordList.push_back("eight");
	wordList.push_back("nine");
	wordList.push_back("ten");
	wordList.push_back("eleven");
	wordList.push_back("twelve");
	wordList.push_back("thirteen");
	wordList.push_back("fourteen");
	wordList.push_back("fifteen");
	wordList.push_back("sixteen");
	wordList.push_back("seventeen");
	wordList.push_back("eighteen");
	wordList.push_back("nineteen");
	wordList.push_back("twenty");
	wordList.push_back("thirty");
	wordList.push_back("forty");
	wordList.push_back("fifty");
	wordList.push_back("sixty");
	wordList.push_back("seventy");
	wordList.push_back("eighty");
	wordList.push_back("ninety");
	wordList.push_back("hundred");
	wordList.push_back("thousand");
	wordList.push_back("");

	return wordList;
}
WordtoTokenMap WordList::generateWordTokenMap()
{
	WordtoTokenMap wordTokenMap;
	wordTokenMap.insert(std::pair<std::string, WordToken>("zero", ZERO));
	wordTokenMap.insert(std::pair<std::string, WordToken>("one", ONE));
	wordTokenMap.insert(std::pair<std::string, WordToken>("two", TWO));
	wordTokenMap.insert(std::pair<std::string, WordToken>("three", THREE));
	wordTokenMap.insert(std::pair<std::string, WordToken>("four", FOUR));
	wordTokenMap.insert(std::pair<std::string, WordToken>("five", FIVE));
	wordTokenMap.insert(std::pair<std::string, WordToken>("six", SIX));
	wordTokenMap.insert(std::pair<std::string, WordToken>("seven", SEVEN));
	wordTokenMap.insert(std::pair<std::string, WordToken>("eight", EIGHT));
	wordTokenMap.insert(std::pair<std::string, WordToken>("nine", NINE));
	wordTokenMap.insert(std::pair<std::string, WordToken>("ten", TEN));
	wordTokenMap.insert(std::pair<std::string, WordToken>("eleven", ELEVEN));
	wordTokenMap.insert(std::pair<std::string, WordToken>("twelve", TWELVE));
	wordTokenMap.insert(std::pair<std::string, WordToken>("thirteen", THIRTEEN));
	wordTokenMap.insert(std::pair<std::string, WordToken>("fourteen", FOURTEEN));
	wordTokenMap.insert(std::pair<std::string, WordToken>("fifteen", FIFTEEN));
	wordTokenMap.insert(std::pair<std::string, WordToken>("sixteen", SIXTEEN));
	wordTokenMap.insert(std::pair<std::string, WordToken>("seventeen", SEVENTEEN));
	wordTokenMap.insert(std::pair<std::string, WordToken>("eighteen", EIGHTEEN));
	wordTokenMap.insert(std::pair<std::string, WordToken>("nineteen", NINETEEN));
	wordTokenMap.insert(std::pair<std::string, WordToken>("twenty", TWENTY));
	wordTokenMap.insert(std::pair<std::string, WordToken>("thirty", THIRTY));
	wordTokenMap.insert(std::pair<std::string, WordToken>("forty", FOURTY));
	wordTokenMap.insert(std::pair<std::string, WordToken>("fifty", FIFTY));
	wordTokenMap.insert(std::pair<std::string, WordToken>("sixty", SIXTY));
	wordTokenMap.insert(std::pair<std::string, WordToken>("seventy", SEVENTY));
	wordTokenMap.insert(std::pair<std::string, WordToken>("eighty", EIGHTY));
	wordTokenMap.insert(std::pair<std::string, WordToken>("ninety", NINETY));
	wordTokenMap.insert(std::pair<std::string, WordToken>("hundred", HUNDRED));
	wordTokenMap.insert(std::pair<std::string, WordToken>("thousand", THOUSAND));
	wordTokenMap.insert(std::pair<std::string, WordToken>("", END));
	wordTokenMap.insert(std::pair<std::string, WordToken>("INVALID", INVALID));

	return wordTokenMap;
}
WordtoValueMap WordList::generateWordValueMap()
{
	WordtoValueMap wordValue;
	wordValue.insert(std::pair<std::string, int>("zero", 0));
	wordValue.insert(std::pair<std::string, int>("one", 1));
	wordValue.insert(std::pair<std::string, int>("two", 2));
	wordValue.insert(std::pair<std::string, int>("three", 3));
	wordValue.insert(std::pair<std::string, int>("four", 4));
	wordValue.insert(std::pair<std::string, int>("five", 5));
	wordValue.insert(std::pair<std::string, int>("six", 6));
	wordValue.insert(std::pair<std::string, int>("seven", 7));
	wordValue.insert(std::pair<std::string, int>("eight", 8));
	wordValue.insert(std::pair<std::string, int>("nine", 9));
	wordValue.insert(std::pair<std::string, int>("ten", 10));
	wordValue.insert(std::pair<std::string, int>("eleven", 11));
	wordValue.insert(std::pair<std::string, int>("twelve", 12));
	wordValue.insert(std::pair<std::string, int>("thirteen", 13));
	wordValue.insert(std::pair<std::string, int>("fourteen", 14));
	wordValue.insert(std::pair<std::string, int>("fifteen", 15));
	wordValue.insert(std::pair<std::string, int>("sixteen", 16));
	wordValue.insert(std::pair<std::string, int>("seventeen", 17));
	wordValue.insert(std::pair<std::string, int>("eighteen", 18));
	wordValue.insert(std::pair<std::string, int>("nineteen", 19));
	wordValue.insert(std::pair<std::string, int>("twenty", 20));
	wordValue.insert(std::pair<std::string, int>("thirty", 30));
	wordValue.insert(std::pair<std::string, int>("forty", 40));
	wordValue.insert(std::pair<std::string, int>("fifty", 50));
	wordValue.insert(std::pair<std::string, int>("sixty", 60));
	wordValue.insert(std::pair<std::string, int>("seventy", 70));
	wordValue.insert(std::pair<std::string, int>("eighty", 80));
	wordValue.insert(std::pair<std::string, int>("ninety", 90));
	wordValue.insert(std::pair<std::string, int>("hundred", 100));
	wordValue.insert(std::pair<std::string, int>("thousand", 1000));

	return wordValue;
}
RomanToValueMap WordList::generateRomanValueMap()
{
	RomanToValueMap romanEquivalent;

	romanEquivalent[1] = "I";
	romanEquivalent[2] = "II";
	romanEquivalent[3] = "III";
	romanEquivalent[4] = "IV";
	romanEquivalent[5] = "V";
	romanEquivalent[6] = "VI";
	romanEquivalent[7] = "VII";
	romanEquivalent[8] = "VIII";
	romanEquivalent[9] = "IX";
	romanEquivalent[10] = "X";
	romanEquivalent[20] = "XX";
	romanEquivalent[30] = "XXX";
	romanEquivalent[40] = "XL";
	romanEquivalent[50] = "L";
	romanEquivalent[60] = "LX";
	romanEquivalent[70] = "LXX";
	romanEquivalent[80] = "LXXX";
	romanEquivalent[90] = "XC";
	romanEquivalent[100] = "C";
	romanEquivalent[200] = "CC";
	romanEquivalent[300] = "CCC";
	romanEquivalent[400] = "CD";
	romanEquivalent[500] = "D";
	romanEquivalent[600] = "DC";
	romanEquivalent[700] = "DCC";
	romanEquivalent[800] = "DCCC";
	romanEquivalent[900] = "CM";
	romanEquivalent[1000] = "M";

	return romanEquivalent;
}
